#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020-03-29 13:05
# @Author : youngchaolin

print()

# 1 看代码写结果
v1=[1,2,3,4,5,6,7,8,9]
v2={}

for item in v1:
    if item<6:
        continue
    if 'k1' in v2:
        v2['k1'].append(item)
    else:
        v2['k1']=[item]
print(v2) # {'k1': [6, 7, 8, 9]}

# 2 看代码写结果
import copy
v1='messi'
v2=copy.copy(v1)
v3=copy.deepcopy(v1)
print(v1 is v2) # True
print(v1 is v3) # True


v1=[1,2,3,4,5]
v2=copy.copy(v1)
v3=copy.deepcopy(v1)
print(v1 is v2) # False
print(v1 is v3) # False

# 3 深copy练习
print('-----深copy-----')
v1=[1,2,3,{'name':'messi','numbers':[1,2,3]},4,5]
v2=copy.deepcopy(v1)

print(v1 is v2) # False
print(v1[0] is v2[0]) # True
print(v1[3] is v2[3]) # False

# 狗血的来了
print(v1[3]['name'] is v2[3]['name']) # True 同一代码块的缓存机制
print(v1[3]['numbers'] is v2[3]['numbers']) # False
print(v1[3]['numbers'][1] is v2[3]['numbers'][1]) # True 同一代码块的缓存机制


# 4 使用python代码，构建一个如下的列表
# [['_','_','_'],['_','_','_'],['_','_','_']]
outer=[]
for i in range(3):
    inner=[]
    for j in range(3):
        inner.append('_')
    outer.append(inner)
print(outer)

# 上面的可以使用列表相乘
outer=[]
for i in range(3):
    outer.append(['_']*3)
print(outer)

# 更简单的写法
print([['_']*3]*3)

# 5 将列表中所有姓周的人的信息都删除掉（有坑）
li=['周星驰','周润发','周杰伦','吴腾蓝','周到']
i=1
for item in li:
    if item.startswith('周'):
        # print(item)
        print('第{}次删除'.format(i))
        print(li)
        li.remove(item)
        print(li)
        i+=1
print('最后结果')
print(li) # ['周润发', '吴腾蓝']

# 上面的写法，在同时对列表读取的同时，又删除列表，后面的位置往前移动，索引错乱，倒着来就可以解决
li=['周星驰','周润发','周杰伦','吴腾蓝','周到']
for index in range(len(li)-1,-1,-1):
    if li[index].strip().startswith('周'):
        # 以下都可以
        # li.remove(li[index])
        li.pop(index)
print(li)


# 6 车牌区域划分，先给出以下车牌，根据车牌的信息，分析出各省的车牌持有量
cars=['鲁A35325','鲁B45345','鲁C45671','京A55555','湘K26888','湘A12345','闽A88888']
locals={'鲁':'山东','京':'北京','湘':'湖南','闽':'福建','黑':'黑龙江','沪':'上海'}
# 输出结果 {'山东':3,'北京':1,'湖南':2,'福建':1}
result={}
for car in cars:
    # 切片出省份
    province=car[0:1]
    # 根据省份名，获取全地点名，暂不考虑获取不到的情况
    full_name=locals.get(province)
    # 判断结果字典，是否有这个省的数据，有则改，无则增
    if full_name in result:
        result[full_name]=result[full_name]+1
    else:
        result[full_name]=1
print(result)

# 还有更加简单的写法
result={}
for car in cars:
    # 巧用字典的get方法
    result[locals[car[0]]]=result.get(locals[car[0]],0)+1
print(result)

# 7 用户输入一个数字，判断这个数是否是水仙花数
# 水仙花数，是一个三位数，水仙花数的值=各位上的数字的三次幂之和   如370=3^3+7^3+0^3
while 1:
    input_str=input('请输入一个三位数')
    if input_str.upper()=='Q':break
    if input_str.isdecimal() and len(input_str)==3:
        number=int(input_str)
        # 判断
        # number_1=int(number/100)
        # number_2=int((number-number_1*100)/10)
        # number_3=number-number_1*100-number_2*10

        number_1=int(input_str[0])
        number_2=int(input_str[1])
        number_3=int(input_str[2])

        # 求和
        buf=number_1**3+number_2**3+number_3**3

        if number==buf:
            print(number,', 是水仙花数')
        else:
            print(number,', 不是水仙花数')
    else:
        print('输入格式有误，请重新输入')


# 求所有的水仙花数
for number in range(100,1000,1):
    # 判断
    number_1=int(number/100)
    number_2=int((number-number_1*100)/10)
    number_3=number-number_1*100-number_2*10
    buf=number_1**3+number_2**3+number_3**3
    if number==buf:
        print(number,', 是水仙花数')

# 153 , 是水仙花数
# 370 , 是水仙花数
# 371 , 是水仙花数
# 407 , 是水仙花数